/*
 * libPath.c
 *
 *  Created on: 26/04/2012
 *      Author: utnso
 */

#include "libPath.h"

nodoNombreDirOArch_t*  parsearPath(char* path){
	uint8_t desplazamiento = 0;
	nodoNombreDirOArch_t* pilaFte = NULL;
	while(path[desplazamiento] != '\0'){
		if(path[desplazamiento] == '/'){
			desplazamiento++;
		}
		uint8_t tamanioNombre;
		for(tamanioNombre = 0; path[desplazamiento + tamanioNombre] != '/' && path[desplazamiento + tamanioNombre] != '\0'; tamanioNombre++);

		char* nombre = (char*) malloc(tamanioNombre + 1);
		memset(nombre, '\0', tamanioNombre + 1);
		memcpy(nombre, path + desplazamiento, tamanioNombre);
		apilarNombreDirOArch(&pilaFte, nombre);
		free(nombre);

		desplazamiento += tamanioNombre;
	}
	return pilaFte;
}

void apilarNombreDirOArch(nodoNombreDirOArch_t** pilaFte, char* nombre){
	nodoNombreDirOArch_t* nue = (nodoNombreDirOArch_t*) malloc(sizeof(nodoNombreDirOArch_t));
	nue->nombre = (char*) malloc(strlen(nombre) + 1);
	memset(nue->nombre, '\0', strlen(nombre) + 1);
	strcpy(nue->nombre, nombre);
	nue->sig = *pilaFte;
	*pilaFte = nue;
}

void desapilarNombreDirOArch(nodoNombreDirOArch_t** pilaFte, char** nombre){
	nodoNombreDirOArch_t* aux = (nodoNombreDirOArch_t*) malloc(sizeof(nodoNombreDirOArch_t));
	aux = *pilaFte;
	*nombre = (char*) malloc(strlen(aux->nombre) + 1);
	memset(*nombre, '\0', strlen(aux->nombre) + 1);
	strcpy(*nombre, aux->nombre);
	*pilaFte = (*pilaFte)->sig;
	free(aux->nombre);
	free(aux);
}
